#ifndef __CLASS_MATRIX_Complex_16_H
#define __CLASS_MATRIX_Complex_16_H
#include "head.h"
class matrixc16_
{
	public:
   int no_pool; //This is a special used sign. It means that the pool number that matrix is stored

   int rows;      //The number of rows of the matrix.
   int columns;    //the number of columns of this matrix.
   Complex *array;   //the array used to store the Complex entries of the matrix.
   
     
   matrixc16_()
	{
		rows=0;
   	columns=0;
   	array=NULL;
	};
   matrixc16_(int row,int column);
   matrixc16_ operator=(const Complex &a);
   friend matrixc16_ H(const matrixc16_ &m);
   friend matrixc16_ T(const matrixc16_ &m);
   matrixc16_ slice(int row1,int col1,int row2,int col2);
   friend matrixc16_ slice(const matrixc16_ &m1,int row1,int col1,int row2,int col2);
   
   friend matrixc16_ operator*(Complex x,const matrixc16_ &m1);
   matrixc16_ invert(double Er);
   friend matrixc16_ compose(matrixc16_ &m1,matrixc16_ &m2,int select);
   friend matrixc16_ operator-(matrixc16_ &m);
   friend matrixc16_ operator+(matrixc16_ &m);
   friend void conjugate(matrixc16_ &m);
   matrixc16_  compose(matrixc16_ &m2,int select);
   operator Complex *();
   matrixc16_ multi(const matrixc16_ &a);
   friend double abs_matrix(matrixc16_ &m);
   void conjugate();
   void output();
   ~matrixc16_()
   {
   	
      //delete array;
   }
};

#endif